package com.aabte.commons.encrypt;

import java.security.Key;

public interface Encryptor<T extends Key> {

  /**
   * 获取加密实现名称
   *
   * @return 加密实现名称
   */
  String getProviderName();

  /**
   * 获取密钥
   *
   * @return 密钥
   * @throws EncryptException 加解密失败
   */
  T key() throws EncryptException;

  /**
   * 获取加密算法
   *
   * @return 加密算法
   */
  String getAlgorithm();

  /**
   * 加密
   *
   * @param plainText 明文
   * @return 密文
   * @throws EncryptException 加解密失败
   */
  byte[] encrypt(byte[] plainText) throws EncryptException;

  /**
   * 解密
   *
   * @param cipherText 密文
   * @return 明文
   * @throws EncryptException 加解密失败
   */
  byte[] decrypt(byte[] cipherText) throws EncryptException;
}
